package com.zzyl.common.utils;

import java.time.LocalDate;
import java.time.Period;

/**
 * 年龄计算工具类
 */
public class AgeCalculator {
    
    /**
     * 根据出生日期计算年龄（年）
     * 
     * @param birthday 出生日期，格式为 yyyy-MM-dd
     * @return 年龄（年）
     */
    public static int calculateAge(String birthday) {
        if (birthday == null || birthday.trim().isEmpty()) {
            throw new IllegalArgumentException("出生日期不能为空");
        }
        
        try {
            LocalDate birthDate = LocalDate.parse(birthday);
            LocalDate currentDate = LocalDate.now();
            
            if (birthDate.isAfter(currentDate)) {
                throw new IllegalArgumentException("出生日期不能晚于当前日期");
            }
            
            return Period.between(birthDate, currentDate).getYears();
        } catch (Exception e) {
            throw new IllegalArgumentException("日期格式错误，应为 yyyy-MM-dd 格式", e);
        }
    }
    
    /**
     * 根据出生日期计算精确年龄（年、月、日）
     * 
     * @param birthday 出生日期，格式为 yyyy-MM-dd
     * @return 包含年、月、日的数组，索引0为年，索引1为月，索引2为日
     */
    public static int[] calculateExactAge(String birthday) {
        if (birthday == null || birthday.trim().isEmpty()) {
            throw new IllegalArgumentException("出生日期不能为空");
        }
        
        try {
            LocalDate birthDate = LocalDate.parse(birthday);
            LocalDate currentDate = LocalDate.now();
            
            if (birthDate.isAfter(currentDate)) {
                throw new IllegalArgumentException("出生日期不能晚于当前日期");
            }
            
            Period period = Period.between(birthDate, currentDate);
            return new int[] {period.getYears(), period.getMonths(), period.getDays()};
        } catch (Exception e) {
            throw new IllegalArgumentException("日期格式错误，应为 yyyy-MM-dd 格式", e);
        }
    }
}
